/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package familytree.negocio.bo;

import familytree.negocio.INodoProcessor;
import familytree.persistencia.dao.DAOFactory;
import familytree.persistencia.dao.NodoDAO;
import familytree.persistencia.pojos.Arbol;
import familytree.persistencia.pojos.Nodo;
import familytree.persistencia.pojos.Pareja;
import familytree.persistencia.pojos.Usuario;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author Antonio
 */
public class NodoBO implements INodoProcessor {
    private DAOFactory dAOFactory = DAOFactory.instance(DAOFactory.HIBERNATE);
    
   
    public Nodo getNodo(Usuario usuario){
        NodoDAO nodoDAO = dAOFactory.getNodoDao();
        return nodoDAO.getNodoByIdUsuario(usuario).get(0);
    }
    public Nodo getNodoPorIdNodo(String idNodo){
        NodoDAO nodoDAO = dAOFactory.getNodoDao();
        return nodoDAO.getNodoByIdNodo(idNodo);
    }
    
    public  void deleteNodo(String idNodo){
        NodoDAO nodoDAO = dAOFactory.getNodoDao();
        nodoDAO.makeTransient(idNodo);
    }
    public void updateNodo(Nodo n){
        NodoDAO nodoDAO = dAOFactory.getNodoDao();
        nodoDAO.updateNodo(n);
    }
    
    public void addNodo(Nodo n){
        NodoDAO nodoDAO = dAOFactory.getNodoDao();
        nodoDAO.makePersistent(n);
    }
     
    public void addNodo(Nodo nodo, Arbol arbol, Usuario usuario ){
        NodoDAO nodoDAO = dAOFactory.getNodoDao();
        nodo.setArbol(arbol);
        nodo.setUsuario(usuario);
        nodoDAO.makePersistent(nodo);        
    }
    
    public void addNodo(Nodo nodo, Arbol arbol){
        NodoDAO nodoDAO = dAOFactory.getNodoDao();
        nodo.setArbol(arbol);
        nodoDAO.makePersistent(nodo);
    }
    
    //Funcion  q le da a l nodo del formulario los datos que necesita del nodo recuperado
    //de la sesion
    public void actualizaNodo(Nodo nodoAnterior, Nodo nodoForm){
        nodoAnterior.setNombre(nodoForm.getNombre());
        nodoAnterior.setPrimerApellido(nodoForm.getPrimerApellido());
        nodoAnterior.setSegundoApellido(nodoForm.getSegundoApellido());
        nodoAnterior.setFechaNacimiento(nodoForm.getFechaNacimiento());
        nodoAnterior.setFechaDefuncion(nodoForm.getFechaDefuncion());
        this.updateNodo(nodoAnterior);
    }
    
    public Pareja buscarPareja(Nodo nodo,String idPareja){
        Set<Pareja> parejas= new HashSet<Pareja>();
        for(Pareja par: (Set<Pareja>)nodo.getParejas()){
            parejas.add(par);
        }
        parejas.addAll(nodo.getParejasComoComponenteDos());
        Pareja res = null;
        for(Pareja p : parejas){
            if(p.getIdPareja().equals(idPareja)){
                res = p;
                break;
            }
        }
        return res;
    }
}
